package main

import (
	"fmt"

	"github.com/garyburd/redigo/redis"
)

/*
Redis连接池
说明：通过go对Redis操作，还可以通过Redis连接池，流程如下：
(1)事先初始化一定数量的连接，放入到连接池
(2)当Go需要操作Redis时，直接从Redis连接池取出连接即可
(3)这样可以节省临时获取Redis连接的时间，从而提高效率
*/
//定义一个全局的pool
var pool *redis.Pool

//当启动程序时，就初始化连接池
func init() {
	pool = &redis.Pool{
		MaxIdle:     8,   //最大空闲连接数
		MaxActive:   0,   //表示和数据库的最大连接数，0表示没有限制
		IdleTimeout: 100, //最大空闲时间
		Dial: func() (redis.Conn, error) { //初始化连接的代码，连接哪个ip
			return redis.Dial("tcp", "localhost:6379")
		},
	}
}
func main() {
	//先从pool取出一个连接
	conn := pool.Get()
	defer conn.Close()
	_, err := conn.Do("set", "name", "汤姆猫")
	if err != nil {
		fmt.Println("conn.Do err=", err)
		return
	}
	//取出
	r, err := redis.String(conn.Do("Get", "name"))
	if err != nil {
		fmt.Println("conn.Do err=", err)
		return
	}
	fmt.Println("r=", r)
	defer pool.Close()
}
